import cv2
import numpy as np
import os

def sliding_crop(img_path, out_dir, win_w=730, step=200):
    """
    按给定窗口宽度与步长，水平滑动裁剪原图。
    每张裁剪图保持原图高度 h，宽度固定为 win_w。
    """
    # 读图
    img = cv2.imread(img_path)
    if img is None:
        raise FileNotFoundError(img_path)
    h, w = img.shape[:2]

    # 确保输出目录存在
    os.makedirs(out_dir, exist_ok=True)

    # 计算可裁剪的起始 x 坐标
    starts = list(range(0, w - win_w + 1, step))
    # 如果最后一段不足 730，再补一次右对齐的裁剪
    if starts and starts[-1] + win_w < w:
        starts.append(w - win_w)

    # 逐块裁剪并保存
    base_name = os.path.splitext(os.path.basename(img_path))[0]
    for idx, x0 in enumerate(starts):
        crop = img[:, x0:x0 + win_w]          # 高度整行保留，宽度 730
        out_name = f"{base_name}_{idx:03d}.png"
        cv2.imwrite(os.path.join(out_dir, out_name), crop)
        print(f"Saved {out_name}  (x0={x0})")

# ------------------- demo -------------------
if __name__ == "__main__":
    sliding_crop("1-1b_rotated_columns-c.jpg", "crops")
